﻿<!doctype html>
<html>
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">

    <title>葡萄藤PPT</title>

    <link rel="stylesheet" href="https://ptteng.github.io/PPT/css/reveal/reveal.css">

    <!-- PPT主题，可以在/css/reveal/theme/中选择其他主题，目前暂时只能使用该模板 -->
    <link rel="stylesheet" href="https://ptteng.github.io/PPT/css/reveal/theme/ptt.css">

    <!-- syntax highlighting 代码高亮主题 -->
    <link rel="stylesheet" href="https://ptteng.github.io/PPT/lib/reveal/css/zenburn.css">

    <!-- 打印和PDF输出样式 -->
    <script>
        var link = document.createElement( 'link' );
        link.rel = 'stylesheet';
        link.type = 'text/css';
        link.href = window.location.search.match( /print-pdf/gi ) ? 'https://ptteng.github.io/PPT/css/reveal/print/pdf.css' : '../css/reveal/print/paper.css';
        document.getElementsByTagName( 'head' )[0].appendChild( link );
    </script>
</head>
<body>
<img src="https://ptteng.github.io/PPT/img/demo/logo.png" alt="" usemap="#pttmap" class="base-logo">
<map name="pttmap">
    <area shape="rect" coords="0,0,276,58" href="http://www.jnshu.com" alt="" target="_blank"/>
</map>
<div class="reveal">
    <div class="slides">

        <section>
            <h3>请解释一下CSS3的Flexbox（弹性盒布局模型）以及适用场景？</h3>
            <p>分享人:冯亚超</p>
        </section>

        <section>
            <p>1.背景介绍</p>
            <p>2.知识剖析</p>
            <p>3.常见问题</p>
            <p>4.解决方案</p>
            <p>5.编码实战</p>
            <p>6.扩展思考</p>
            <p>7.参考文献</p>
            <p>8.更多讨论</p>
        </section>

        <section>
            <p>1.背景介绍</p>
        </section>

        <section>
            <p>Flex 是 Flexible Box 的缩写，意为"弹性布局"，用来为盒状模型提供最大的灵活性。</p>
			<p>任何一个容器都可以指定为 Flex 布局,行内元素也可以使用 Flex 布局,Webkit 内核的浏览器，必须加上-webkit前缀。</p>
			<p>容器设为 Flex 布局以后，子元素的float、clear和vertical-align属性将失效。</p>
			<p>Flex 布局是W3C在2009年提出的一种新方案,它可以简便、完整、响应式地实现各种页面布局。目前，它已经得到了所有浏览器的支持，这意味着，现在就能很安全地使用这项功能。</p>
		</section>

		<section>
            <h3>2.知识剖析</h3>
        </section>

        <section>
		    <h4>Flex概念</h4>
            <p>采用 Flex 布局的元素，称为 Flex 容器（flex container），简称"容器"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称"项目"。</p>
        </section>

        <section>
			<p>容器默认存在两根轴：水平的主轴（main axis）和垂直的交叉轴（cross axis）。主轴的开始位置（与边框的交叉点）叫做main start，结束位置叫做main end；交叉轴的开始位置叫做cross start，结束位置叫做cross end。</p>
            <p>项目默认沿主轴排列。单个项目占据的主轴空间叫做main size，占据的交叉轴空间叫做cross size</p>
            <img src="Flex概念.png">
		</section>

		<section>
            <h3>容器的属性</h3>
			<p>Flex容器有6个属性:</p>
			<p>flex-direction</p>
			<p>flex-wrap</p>
			<p>flex-flow</p>
			<p>justify-content</p>
			<p>align-items</p>
			<p>align-content</p>
        </section>

		<section>
            <h4>flex-direction属性</h4>
			<p>flex-direction属性决定主轴的方向（即项目的排列方向）。</p>
			<p>flex-direction有4个值:</p>
			<p>row（默认值）：主轴为水平方向，起点在左端。</p>
			<p>row-reverse：主轴为水平方向，起点在右端。</p>
			<p>column：主轴为垂直方向，起点在上沿。</p>
			<p>column-reverse：主轴为垂直方向，起点在下沿。</p>
        </section>

		<section>
            <h4>flex-wrap属性</h4>
			<p>默认情况下，项目都排在一条线（又称"轴线"）上。flex-wrap属性定义，如果一条轴线排不下，如何换行。</p>
			<p>flex-wrap有3个值:</p>
			<p>nowrap（默认）：不换行。</p>
			<p>wrap：换行，第一行在上方。</p>
			<p>wrap-reverse：换行，第一行在下方。</p>
        </section>

		<section>
            <h4>flex-flow属性</h4>
			<p>flex-flow属性是flex-direction属性和flex-wrap属性的简写形式，默认值为row nowrap。</p>
			<p></p>
			<p></p>
			<p></p>
        </section>

		<section>
            <h4> justify-content属性</h4>
			<p>justify-content属性定义了项目在主轴上的对齐方式。</p>
			<p>它可能取5个值，具体对齐方式与轴的方向有关。下面假设主轴为从左到右:</p>
			<p>flex-start（默认值）：左对齐</p>
			<p>flex-end：右对齐</p>
			<p>center： 居中</p>
			<p>space-between：两端对齐，项目之间的间隔都相等。</p>
			<p>space-around：每个项目两侧的间隔相等。所以，项目之间的间隔比项目与边框的间隔大一倍。</p>
        </section>

		<section>
            <h4>align-items属性</h4>
			<p>align-items属性定义项目在交叉轴上如何对齐。</p>
			<p>它可能取5个值。具体的对齐方式与交叉轴的方向有关，下面假设交叉轴从上到下:</p>
			<p>flex-start：交叉轴的起点对齐。</p>
			<p>flex-end：交叉轴的终点对齐。</p>
			<p>center：交叉轴的中点对齐。</p>
			<p>baseline: 项目的第一行文字的基线对齐。</p>
			<p>stretch（默认值）：如果项目未设置高度或设为auto，将占满整个容器的高度。</p>
        </section>

		<section>
            <h4>align-content属性</h4>
			<p>align-content属性定义了多根轴线的对齐方式。如果项目只有一根轴线，该属性不起作用。</p>
			<p>该属性可能取6个值:</p>
			<p>flex-start：与交叉轴的起点对齐。</p>
			<p>flex-end：与交叉轴的终点对齐。</p>
			<p>center：与交叉轴的中点对齐。</p>
			<p>space-between：与交叉轴两端对齐，轴线之间的间隔平均分布。</p>
			<p>space-around：每根轴线两侧的间隔都相等。所以，轴线之间的间隔比轴线与边框的间隔大一倍。</p>
			<p>stretch（默认值）：轴线占满整个交叉轴。</p>
        </section>

		<section>
            <h3>项目的属性</h3>
			<p>Flex项目有6个属性:</p>
			<p>order</p>
			<p>flex-grow</p>
			<p>flex-shrink</p>
			<p>flex-basis</p>
			<p>flex</p>
			<p>align-self</p>
        </section>

		<section>
			<p>1.order属性定义项目的排列顺序。数值越小，排列越靠前，默认为0。</p>
        </section>

	    <section>
			<p>2.flex-grow属性定义项目的放大比例，默认为0，即如果存在剩余空间，也不放大。如果所有项目的flex-grow属性都为1，则它们将等分剩余空间（如果有的话）。如果一个项目的flex-grow属性为2，其他项目都为1，则前者占据的剩余空间将比其他项多一倍。</p>
        </section>

	    <section>
			<p>3.flex-shrink属性定义了项目的缩小比例，默认为1，即如果空间不足，该项目将缩小。如果所有项目的flex-shrink属性都为1，当空间不足时，都将等比例缩小。如果一个项目的flex-shrink属性为0，其他项目都为1，则空间不足时，前者不缩小。而且负值对该属性无效。</p>
        </section>

	    <section>
			<p>4.flex-basis属性定义了在分配多余空间之前，项目占据的主轴空间（main size）。浏览器根据这个属性，计算主轴是否有多余空间。它的默认值为auto，即项目的本来大小。它可以设为跟width或height属性一样的值（比如350px），则项目将占据固定空间。</p>
        </section>

	    <section>
			<p>5.flex属性是flex-grow, flex-shrink 和 flex-basis的简写，默认值为0 1 auto。后两个属性可选。该属性有两个快捷值：auto (1 1 auto) 和 none (0 0 auto)。建议优先使用这个属性，而不是单独写三个分离的属性，因为浏览器会推算相关值。</p>
        </section>

	    <section>
			<p>6.align-self属性允许单个项目有与其他项目不一样的对齐方式，可覆盖align-items属性。默认值为auto，表示继承父元素的align-items属性，如果没有父元素，则等同于stretch。</p>
        </section>

	    <section>
            <h3>3.常见问题</h3>
        </section>

        <section>
            <p>Flex可以兼容所有的浏览器吗?</p>
        </section>



        <section>
            <h3>4.解决方案</h3>
        </section>

        <section>
            <p>目前，它已经得到了所有浏览器的支持,但是还是要注意浏览器使用的哪种内核:</p>
			<p>.box {</p>
			<p>display: -webkit-flex;</p>
			<p>display: -ms-flexbox;</p>
			<p>display: flex;</p>
			<p>}</p>
        </section>

        <section>
            <h3>5.编码实战</h3>
        </section>

        <section>
        	<h3>6.扩展思考</h3>
        </section>

        <section>
            <p>flex-grow, flex-shrink, flex-basis</p>
			<p>flex-grow属性定义项目的放大比例，默认为0，即如果存在剩余空间，也不放大。</p>
			<p>flex-shrink属性定义了项目的缩小比例，默认为1，即如果空间不足，该项目将缩小。</p>
			<p>flex-basis属性定义了在分配多余空间之前，项目占据的主轴空间（main size）。浏览器根据这个属性，计算主轴是否有多余空间。它的默认值为auto，即项目的本来大小。</p>
        </section>

        <section>
            <h3>7.参考文献</h3>
            <p>http://www.ruanyifeng.com/blog/2015/07/flex-grammar.html</p>
			<p>http://www.ruanyifeng.com/blog/2015/07/flex-examples.html</p>
        </section>

        <section>
            <h3>8.更多讨论</h3>
            <p>为什么需要反向代理</p>
			<p>用户访问服务器的时候会占用服务器的资源,而服务器的资源是有限的,当大量用户访问同一个服务器时就会影响服务器的性能</p>
			<p>所以我们需要反向代理服务器处理这些请求,帮服务器"减压"</p>
        </section>

		<section>
         <p></p>
		</section>

        <section>
            <h4>谢谢观看</h4>
            <p></p>
            <p><small>By:冯亚超</small></p>
        </section>


    </div>
</div>

<script src="https://ptteng.github.io/PPT/lib/reveal/js/head.min.js"></script>
<script src="https://ptteng.github.io/PPT/lib/reveal/reveal.js"></script>

<script>
    // 以下为常见配置属性的默认值
    // {
    //  controls: true, // 是否在右下角展示控制条
    //  progress: true, // 是否显示演示的进度条
    //  slideNumber: false, // 是否显示当前幻灯片的页数编号，也可以使用代码slideNumber: 'c / t' ，表示当前页/总页数。
    //  history: false, // 是否将每个幻灯片改变加入到浏览器的历史记录中去
    //  keyboard: true, // 是否启用键盘快捷键来导航
    //  overview: true, // 是否启用幻灯片的概览模式，可使用"Esc"或"o"键来切换概览模式
    //  center: true, // 是否将幻灯片垂直居中
    //  touch: true, // 是否在触屏设备上启用触摸滑动切换
    //  loop: false, // 是否循环演示
    //  rtl: false, // 是否将演示的方向变成RTL，即从右往左
    //  fragments: true, // 全局开启和关闭碎片。
    //  autoSlide: 0, // 两个幻灯片之间自动切换的时间间隔（毫秒），当设置成 0 的时候则禁止自动切换，该值可以被幻灯片上的 ` data-autoslide` 属性覆盖
    //  transition: 'default', // 切换过渡效果，有none/fade/slide/convex/concave/zoom
    //  transitionSpeed: 'default', // 过渡速度，default/fast/slow
    //  mouseWheel: true, //是否启用通过鼠标滚轮来切换幻灯片
    // }
    // 初始化幻灯片
    Reveal.initialize({
        history: true,
        dependencies: [
            { src: 'https://ptteng.github.io/PPT/plugin/markdown/marked.js' },
            { src: 'https://ptteng.github.io/PPT/plugin/markdown/markdown.js' },
            { src: 'https://ptteng.github.io/PPT/plugin/notes/notes.js', async: true },
            { src: 'https://ptteng.github.io/PPT/plugin/highlight/highlight.js', async: true, callback: function() { hljs.initHighlightingOnLoad(); } }
        ]
    });
</script>
</body>
</html>
